// 页面管理服务

// 生成唯一ID的函数 - 确保在快速循环调用中也能生成唯一ID
let lastTimestamp = 0;
let sequence = 0;

function generateId() {
  // 获取当前时间戳
  let timestamp = Date.now();
  
  // 改进的序列号机制
  if (timestamp === lastTimestamp) {
    sequence++;
    // 序列号达到上限时强制增加时间戳
    if (sequence > 9999) {
      timestamp = Date.now(); // 重新获取时间戳确保其最新
      sequence = 0;
    }
  } else {
    sequence = 0;
  }
  
  lastTimestamp = timestamp;
  
  // 增强的随机数生成 - 使用多个随机源和位操作
  const random1 = Math.floor(Math.random() * 0xFFFFFFFF).toString(36);
  const random2 = Math.floor(Math.random() * 0xFFFFFFFF).toString(36);
  const random3 = Math.floor(Math.random() * 0xFFFFFF).toString(36);
  const sequenceStr = sequence.toString(36).padStart(4, '0');
  
  // 组合多种元素生成唯一ID，使用更紧凑的格式
  return `${timestamp.toString(36)}${sequenceStr}${random1.slice(-6)}${random2.slice(-6)}${random3.slice(-4)}`;
}

class PageManager {
  constructor() {
    this.currentPageId = null;
    this.pages = [];
    this.loadPages();
  }
  // 加载页面列表
  loadPages() {
    const savedPages = localStorage.getItem('lowcodePages');
    if (savedPages) {
      try {
        const pagesData = JSON.parse(savedPages);
        this.pages = pagesData.pages || [];
        this.currentPageId = pagesData.currentPageId || (this.pages.length > 0 ? this.pages[0].id : null);
      } catch (e) {
        console.error('加载页面数据失败', e);
        this.pages = [];
        this.currentPageId = null;
      }
    }

    // 如果没有页面，创建多个示例页面
    if (this.pages.length === 0) {
      // 首页
      this.createPage('首页', {
        title: '首页 - 欢迎来到我的网站',
        route: '/',
        seo: {
          title: '首页 - 欢迎来到我的网站',
          description: '这是网站的首页，展示了我们的主要内容和服务',
          keywords: ['首页', '欢迎', '网站', '服务']
        }
      });
      
      // 关于我们页面
      this.createPage('关于我们', {
        title: '关于我们 - 了解我们的团队和愿景',
        route: '/about',
        seo: {
          title: '关于我们 - 了解我们的团队和愿景',
          description: '了解我们的团队、公司愿景和发展历程',
          keywords: ['关于我们', '团队', '愿景', '公司介绍']
        }
      });
      
      // 产品中心页面
      this.createPage('产品中心', {
        title: '产品中心 - 我们的产品和服务',
        route: '/products',
        seo: {
          title: '产品中心 - 我们的产品和服务',
          description: '浏览我们提供的所有产品和服务',
          keywords: ['产品中心', '产品', '服务', '解决方案']
        }
      });
      
      // 联系我们页面
      this.createPage('联系我们', {
        title: '联系我们 - 与我们取得联系',
        route: '/contact',
        seo: {
          title: '联系我们 - 与我们取得联系',
          description: '通过电话、邮箱或在线表单与我们取得联系',
          keywords: ['联系我们', '联系方式', '咨询', '反馈']
        }
      });
      
      // 博客页面
      this.createPage('博客', {
        title: '博客 - 最新动态和行业资讯',
        route: '/blog',
        seo: {
          title: '博客 - 最新动态和行业资讯',
          description: '获取最新的公司动态、行业资讯和专业知识',
          keywords: ['博客', '动态', '资讯', '知识']
        }
      });
      
      this.savePages();
    }
  }

  // 保存页面列表
  savePages() {
    const pagesData = {
      pages: this.pages,
      currentPageId: this.currentPageId
    };
    localStorage.setItem('lowcodePages', JSON.stringify(pagesData));
  }

  // 创建新页面
  createPage(pageName, options = {}) {
    const route = options.route || `/${pageName.toLowerCase().replace(/\s+/g, '-')}`;
    const newPage = {
      id: `page-${generateId()}`,
      name: pageName || `页面${this.pages.length + 1}`,
      title: options.title || pageName || `页面${this.pages.length + 1}`,
      route: route,
      seo: {
        title: options.seo?.title || pageName || `页面${this.pages.length + 1}`,
        description: options.seo?.description || `这是${pageName || `页面${this.pages.length + 1}`}的描述`,
        keywords: options.seo?.keywords || []
      },
      createdAt: new Date().toISOString(),
      updatedAt: new Date().toISOString(),
      components: [] // 默认空组件数组
    };

    this.pages.push(newPage);
    this.currentPageId = newPage.id;
    this.savePages();
    this.saveCurrentPageComponents([]); // 初始化当前页面的组件数据

    return newPage;
  }

  // 切换当前页面
  switchPage(pageId) {
    const page = this.getPage(pageId);
    if (page) {
      this.currentPageId = pageId;
      this.savePages();
      return true;
    }
    return false;
  }

  // 获取当前页面
  getCurrentPage() {
    return this.getPage(this.currentPageId);
  }

  // 根据ID获取页面
  getPage(pageId) {
    return this.pages.find(page => page.id === pageId);
  }

  // 获取所有页面
  getAllPages() {
    return [...this.pages];
  }

  // 重命名页面
  renamePage(pageId, newName) {
    const page = this.getPage(pageId);
    if (page) {
      page.name = newName;
      page.updatedAt = new Date().toISOString();
      this.savePages();
      return true;
    }
    return false;
  }

  // 删除页面
  deletePage(pageId) {
    const index = this.pages.findIndex(page => page.id === pageId);
    if (index !== -1 && this.pages.length > 1) {
      // 如果删除的是当前页面，切换到第一个页面
      if (this.currentPageId === pageId) {
        const newCurrentPageIndex = index === 0 ? 1 : 0;
        this.currentPageId = this.pages[newCurrentPageIndex].id;
      }
      
      // 从localStorage中删除该页面的组件数据
      localStorage.removeItem(`lowcodePageData_${pageId}`);
      
      // 从页面列表中删除
      this.pages.splice(index, 1);
      this.savePages();
      return true;
    }
    return false;
  }

  // 保存当前页面的组件数据
  saveCurrentPageComponents(components) {
    if (this.currentPageId) {
      const pageData = {
        components: components,
        createdAt: new Date().toISOString(),
        updatedAt: new Date().toISOString()
      };
      localStorage.setItem(`lowcodePageData_${this.currentPageId}`, JSON.stringify(pageData));
      
      // 更新页面的更新时间
      const currentPage = this.getCurrentPage();
      if (currentPage) {
        currentPage.updatedAt = new Date().toISOString();
        this.savePages();
      }
    }
  }

  // 加载当前页面的组件数据
  loadCurrentPageComponents() {
    if (this.currentPageId) {
      const savedData = localStorage.getItem(`lowcodePageData_${this.currentPageId}`);
      if (savedData) {
        try {
          const pageData = JSON.parse(savedData);
          return pageData.components || [];
        } catch (e) {
          console.error('加载页面组件数据失败', e);
        }
      }
    }
    return [];
  }
  
  // 更新页面SEO设置
  updatePageSEO(pageId, seoData) {
    const page = this.getPage(pageId);
    if (page) {
      page.seo = {
        ...page.seo,
        ...seoData
      };
      page.updatedAt = new Date().toISOString();
      this.savePages();
      return true;
    }
    return false;
  }
  
  // 更新页面标题
  updatePageTitle(pageId, title) {
    const page = this.getPage(pageId);
    if (page) {
      page.title = title;
      page.updatedAt = new Date().toISOString();
      this.savePages();
      return true;
    }
    return false;
  }
  
  // 更新页面路由
  updatePageRoute(pageId, route) {
    const page = this.getPage(pageId);
    if (page && route) {
      // 确保路由以/开头
      const normalizedRoute = route.startsWith('/') ? route : `/${route}`;
      page.route = normalizedRoute;
      page.updatedAt = new Date().toISOString();
      this.savePages();
      return true;
    }
    return false;
  }
  
  // 根据路由获取页面
  getPageByRoute(route) {
    return this.pages.find(page => page.route === route);
  }
  
  // 检查路由是否已存在
  isRouteExists(route, excludePageId = null) {
    return this.pages.some(page => 
      page.route === route && page.id !== excludePageId
    );
  }
}

// 导出单例实例
export default new PageManager();